<?php
/**
 * @author FeoniX
 * @version v1.0
 */
class Router {
	public function __construct(){
		if(C('URL_MODE') == 1){
		 	//如果URL模式为1 那么就在GET中获取控制器
		 	$control = !empty($_GET['c']) ? ucfirst(trim($_GET['c'])) : '';
		 	$action = !empty($_GET['a']) ? trim($_GET['a']) : '';
		}elseif(C('URL_MODE') == 2){
			//如果为2 那么就是使用PATH_INFO模式
			if(isset($_SERVER['PATH_INFO'])){
			 	$path = trim($_SERVER['PATH_INFO'], '/');
			 	$paths = explode('/', $path);
			 	$control = array_shift($paths);
			 	$action = array_shift($paths);
			 	$params = $this->setParams($paths);
			}elseif(@$_GET['c']) {
				$control = !empty($_GET['c']) ? ucfirst(trim($_GET['c'])) : '';
		 		$action = !empty($_GET['a']) ? trim($_GET['a']) : '';
			}
		}
		//这里判断控制器的值是否为空, 如果是空的使用默认的
		$_GET['c'] = !empty($control) ? ucfirst($control) : C('DEFAULT_CONTRL');
		//和上面一样
		$_GET['a'] = !empty($action) ? $action : C('DEFAULT_ACTION');
		//如果控制器为getList，可以通过下面方式访问
		$listActArr = array('list','_list','list_','getlist','get_list');
		if(in_array(strtolower($_GET['a']),$listActArr)){
			$_GET['a'] = 'getList';
		}
	}
	public function run(){
		$ctrl = $_GET['c'];
		$act = $_GET['a'];

		$ctrlFile = APP_PATH . 'Controller/' . $ctrl . 'Controller.class.php';

		if(!file_exists($ctrlFile)){
			exit("控制器 {$ctrl}Controller 不存在，请检查 {$ctrlFile} 文件是否存在<br>");
		}
		include($ctrlFile);
		$class = ucfirst($ctrl).'Controller';
		if(!class_exists($class)) //判断类是否存在, 如果不存在提示错误
		{
			exit("{$ctrl}Controller.class.php中未定义的控制器类" . $class);
		}
		$instance = new $class(); //否则创建实例
		if(!method_exists($instance, $act)) //判断实例$instance中是否存在$action方法, 不存在则提示错误
		{
			exit("{$class}类中不存在方法:{$act}");
		}

		$instance->$act();
	}
	/**
	 * 设置pathinfo模式下的URL参数
	 * @param [type] $paths [description]
	 */
	private function setParams($paths){
		$params = array();
		for ($i=0;$i<count($paths);$i+=2){
			$_GET[$paths[$i]] = ($i+1<count($paths))?$paths[$i+1]:'';
		}
		return $_GET;
	}
}

?>